package com.cd.music.service.impl;

import com.cd.music.dao.FCodeDao;
import com.cd.music.dto.FCodeDto;
import com.cd.music.dto.ResultBean;
import com.cd.music.model.FCode;
import com.cd.music.service.FCodeService;
import com.cd.music.utils.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;

/**
 * @author yxl 余秀良
 * @version 1.0
 * @TODO　创建有问题
 * @description: Ｆ码逻辑操作实现类
 * @date 2018年03月02日  下午4:47
 * @address: 四川成都
 */
@Transactional(readOnly = true, rollbackFor = Exception.class)
@Service(value = "fCodeService")
public class FCodeServiceImpl implements FCodeService {
    @Resource
    private FCodeDao fCodeDao;

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    @Override
    public ResultBean batchCreate(int total) {
        ResultBean.Builder builder = ResultBean.builder();
        if (total > 0) {
            List<FCode> fCodeList = new LinkedList<>();
            //List<List<Object>> dataList = new LinkedList<>();
            //根据条数循环生成Ｆ码
            for (int i = 1; i <= total; i++) {
                List<Object> list = new LinkedList<>();
                FCode fCode = new FCode();
                fCode.setId(IdUtil.getUUID());
                fCode.setIsUse(false);
                String code = "FC" + IdUtil.createFCode();
                fCode.setValue(code);
                fCodeList.add(fCode);
                list.add(code);
                //dataList.add(list);
            }
            boolean isOk = fCodeDao.insertByBatch(fCodeList) > 0;
            builder.success(isOk).message(isOk ? "生成Ｆ码成功" : "生成Ｆ码失败").code(isOk ? 200 : 500);
        } else {
            builder.message("生成条数不能为０").success(false);
        }
        return builder.build();
    }

    /**
     * 查询Ｆ码
     *
     * @param dto 生成数量
     * @return 返回信息
     * @author yxl 余秀良
     * @version 1.0
     * @description: 批量生成Ｆ码
     * @date 2018年03月02日 下午4:45
     * @address: 四川成都
     */
    @Override
    public ResultBean select(FCodeDto dto) {
        ResultBean.Builder builder = ResultBean.builder();
        if (dto != null) {
            FCode fCode = new FCode();
            fCode.setValue(dto.getValue());
            fCode.setId(dto.getId());
            fCode.setIsUse(dto.getIsUse());
            FCode selectFCode = fCodeDao.selectFCode(fCode);
            builder.code(200).success(true).data(selectFCode).message("查询成功");
        } else {
            builder.success(false).message("缺少参数").code(400);
        }
        return builder.build();
    }

    /**
     * 查询Ｆ码
     *
     * @param dto 生成数量
     * @return 返回信息
     * @author yxl 余秀良
     * @version 1.0
     * @description: 批量生成Ｆ码
     * @date 2018年03月02日 下午4:45
     * @address: 四川成都
     */
    @Override
    public ResultBean selectList(FCodeDto dto) {
        ResultBean.Builder builder = ResultBean.builder();
        if (dto != null) {
            if (dto.getPageIndex() != null && dto.getPageSize() != null) {
                Integer index = dto.getPageIndex();
                Integer pageSize = dto.getPageSize();
                Integer pageIndex = (index <= 0) ? 0 : ((index - 1) * pageSize);
                dto.setPageIndex(pageIndex);
                List<FCode> list = fCodeDao.selectFCodeList(dto);
                builder.code(200).success(true).data(list).message("查询成功");
            } else {
                builder.code(400).success(false).message("缺少分页参数");
            }
        } else {
            List<FCode> list = fCodeDao.selectFCodeList(null);
            builder.code(200).success(true).data(list).message("查询成功");
        }
        return builder.build();
    }

    /**
     * 修改Ｆ码
     *
     * @param code 参数
     * @return 返回信息
     * @author yxl 余秀良
     * @version 1.0
     * @description: 修改Ｆ码
     * @date 2018年03月02日 下午4:45
     * @address: 四川成都
     */
    @Override
    public ResultBean update(FCodeDto code) {
        return null;
    }
}
